package com.qfedu.entity.course02;

/**
 *
 */
public class SqQueue<E> {
    //使用数组存放数据元素
    private E[] elements;
    //队列头所在的索引
    private int head;
    //队列尾所在索引的下一个位置
    private int tail;

    public SqQueue(int size) {
        //额外留出一个空间用于循环队列的队满判断
        elements = (E[]) new Object[size + 1];
        head = tail = 0;
    }

    public int enQueue(E e) {
        if ((tail + 1) % elements.length == head) {
            //队列已满
            return -1;
        }
        //队尾元素的下一个位置放入新元素
        elements[tail] = e;
        //队尾按照循环队列方式下移一个位置
        tail = (tail + 1) % elements.length;
        return 1;
    }

    public E removeQueue() {
        //判断队列是否为空
        if (head == tail) {
            return null;
        }
        //从对头获取数据
        E e = elements[head];
        //对头指针按照循环队列后移一个位置
        head = (head + 1) % elements.length;
        //返回元素
        return e;
    }
}
